import java.util.Deque;
import java.util.LinkedList;
//利用栈
public class Solution {
    //结算结果
    private int calc(String op,int num1,int num2){
        switch(op){
            case "+":
                return num2+num1;
            case "-":
                return num2-num1;
            case "*":
                return num2*num1;
            case "/":
                return num2/num1;
        }
        //理论上不会走到这一步，只是为了让它有个返回值
        return -1;
    }
    //判断是否是运算符
    private boolean isOperator(String str){

        return str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/");
    }
    public int evalRPN(String[] tokens) {

        Deque<Integer> stack=new LinkedList<>();

        for(String x:tokens){
            if(!isOperator(x)){
                //不是运算符直接入栈
                int number=Integer.parseInt(x);//将字符串转换成int
                stack.push(number);
            }else{
                //是运算符从栈里取出两个运算符前面的数
                //进行运算
                int a=stack.pop();
                int b=stack.pop();
                int result=calc(x,a,b);
                //计算完一次以后记得将结果再入栈
                stack.push(result);
            }
        }
        //最后栈里剩下的那个就是结果
        int ans=stack.pop();
        return ans;
    }
}